package com.itic.appbase.applications.sys.common.service;

import java.util.List;
import java.util.Map;

import com.itic.appbase.applications.sys.code.persistence.model.CodeDetail;
import com.itic.appbase.applications.sys.code.vo.CodeDetailVo;
import com.itic.appbase.applications.sys.org.persistence.model.Org;
import com.itic.appbase.applications.sys.region.persistence.model.Region;
import com.itic.appbase.applications.sys.user.persistence.model.SysUser;

/**
 * 系统sys对外提供的接口
 * <p>
 * Company: itic
 * </p>
 * 
 * @author: shijun
 * @date: 2015年6月12日 下午3:46:27
 * @version: V1.0
 */
public interface OutCommonService {
    /**
     * 获取代码表列表 </br>type :代码表类型，如T_DM_SEX </br>filterCode :需要过滤的代码
     * 
     * @param codeDetailVo
     * @return List<CodeDetail>
     */
    public List<CodeDetail> getCodeDetail(CodeDetailVo codeDetailVo);

    /**
     * 代码转名称 </br>根据配置信息获取代码名称
     * 
     * @param obj
     * @param codeMap
     *            转换字段、代码类型
     * @return Object
     */
    public Object getNameByCode(Object obj, Map<String, String> codeMap);

    /**
     * 获取组织机构树 </br>根据code/pCode/clazz获取组织机构树
     * 
     * @param queryOrg
     * @return
     */
    public List<Org> getOrgTree(Org queryOrg);

    /**
     * 根据组织机构code获取组织机构对象
     * 
     * @param code
     * @return
     */
    public Org getOrgByCode(String code);
    
    /**
     *  根据组织机构code获取组织机构名称
     * @param code
     * @return
     */
    public String getOrgNameByCode(String code);

    /**
     * 获取行政区划树 </br>根据id/pId查询行政区划树
     * 
     * @param region
     * @return
     */
    public List<Region> getRegionTree(Region region);

    /**
     * 根据id获取行政区划对象
     * 
     * @param id
     * @return
     */
    public Region getRegionById(String id);
    
    /**
     * 根据id获取行政区划名称
     * 
     * @param id
     * @return
     */
    public String getRegionNameById(String id);

    /**
     * 根据行政区划码code获取行政区划对象
     * 
     * @param code
     * @return
     */
    public Region getRegionByCode(String code);
    
    /**
     * 根据行政区划码code获取行政区划名称
     * 
     * @param code
     * @return
     */
    public String getRegionNameByCode(String code);

    /**
     * 根据id获取用户对象
     * 
     * @param id
     * @return
     */
    public SysUser getUserById(String id);

    /**
     * 根据用户id获取组织机构
     * 
     * @param userId
     * @return
     */
    public Org getOrgByUserId(String userId);
    
    /**
     * 权限过滤：根据组织机构码获取本下级code list
     * @param orgCode 组织机构码
     * @return
     */
    public List<String> getBxjOrgByCode(String orgCode);
    
    /**
     * 权限过滤：根据组织机构码获取下级code list
     * @param orgCode 组织机构码
     * @return
     */
    public List<String> getXjOrgByCode(String orgCode);
    
    /**
     * 权限过滤：根据行政区划id获取本下级code list
     * @param regionId 行政区划id
     * @return
     */
    public List<String> getBxjOrgByRegionId(String regionId);
    
    /**
     * 权限过滤：根据行政区划id获取下级code list
     * @param regionId 行政区划id
     * @return
     */
    public List<String> getXjOrgByRegionId(String regionId);

    /**
     * 获取行政区划树 </br>根据id/pId查询行政区划树（灾情现场资料）
     * 
     * @param region
     * @return
     */
	List<Region> selectRegionListForZqxczl(Region region);
	
	/**
	 * 根据传入的行政区划id获取本级和所有上级行政区划对象
	 * 模块：救灾专家导出功能
	 * 
	 * @param regionId 行政区划id
	 * @return
	 */
	public List<Region> getSjAllRegionByRegionId(String regionId);
	/**
	 * 获取当前登录人的本下级行政区划树---包括村级
	 * 
	 * @param regionId 行政区划id
	 * @return
	 */
	public List<Region> getRegionTreeCj(Region region);
	
	/**
     * 代码转名称
     * 
     * @param type
     * @param code
     *            代码类型、 代码
     * @return String
     */
    public String getNameByCode(String type, String code);
    
    /**
     * 批量删除附件
     * @param ids
     * @return String
     */
    public String deleteFiles(String ids);
    
    /**
     * 根据fileId获取fileUrl路径
     */
    public String getFileUrl(String fileId);

	public String getFilePath(String fileId);
}
